﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Runtime.Serialization;
using System.ComponentModel;

namespace elr_tracking_bal.CAT
{
    public class ProveedorCuenta : INotifyPropertyChanged
    {
        private int _ID_PROVEEDOR_CUENTA;
        private Proveedor _PROVEEDOR;
        private Banco _BANCO;
        private string _NUMERO_CUENTA;
        private string _CLABE;
        private string _BENEFICIARIO;

        public int ID_PROVEEDOR_CUENTA
        {
            get
            {
                return _ID_PROVEEDOR_CUENTA;
            }
            set
            {
                if (_ID_PROVEEDOR_CUENTA != value)
                {
                    _ID_PROVEEDOR_CUENTA = value;
                    if (this.PropertyChanged != null)
                    {
                        this.PropertyChanged(this, new PropertyChangedEventArgs("ID_PROVEEDOR_CUENTA"));
                    }
                }
            }
        }

        public string NUMERO_CUENTA
        {
            get
            {
                return _NUMERO_CUENTA;
            }
            set
            {
                if (_NUMERO_CUENTA != value)
                {
                    _NUMERO_CUENTA = value;
                    if (this.PropertyChanged != null)
                    {
                        this.PropertyChanged(this, new PropertyChangedEventArgs("NUMERO_CUENTA"));
                    }
                }
            }
        }

        public string CLABE
        {
            get
            {
                return _CLABE;
            }
            set
            {
                if (_CLABE != value)
                {
                    _CLABE = value;
                    if (this.PropertyChanged != null)
                    {
                        this.PropertyChanged(this, new PropertyChangedEventArgs("CLABE"));
                    }
                }
            }
        }

        public string BENEFICIARIO
        {
            get
            {
                return _BENEFICIARIO;
            }
            set
            {
                if (_BENEFICIARIO != value)
                {
                    _BENEFICIARIO = value;
                    if (this.PropertyChanged != null)
                    {
                        this.PropertyChanged(this, new PropertyChangedEventArgs("BENEFICIARIO"));
                    }
                }
            }
        }
        /// <summary>
        /// Método que ejecuta el store para obtener los Proveedor Cuenta
        /// </summary>
        /// <returns></returns>
        public static DataTable GetData()
        {
            DataTable dt;
            dt = elr_tracking_dal.SrvDB.ExecuteQuery("exec SP_GETLIST_CAT_PROVEEDOR_CUENTA");
            return dt;
        }
        /// <summary>
        /// Método para obtener la lista de Proveedor Cuenta
        /// </summary>
        /// <returns></returns>
        public static List<ProveedorCuenta> GetDataProveedorCuenta()
        {
            try
            {
                DataTable dt;
                dt = ProveedorCuenta.GetData();
                if (dt.Rows.Count == 0)
                {
                    return null;
                }
                else
                {
                    List<ProveedorCuenta> list = dt.AsEnumerable().Select(
                        row => new ProveedorCuenta
                        {
                            ID_PROVEEDOR_CUENTA = row.Field<int?>("ID_PROVEEDOR_CUENTA").GetValueOrDefault(),
                            //PROVEEDOR = String.IsNullOrEmpty(row.Field<string>("PROVEEDOR")) ? "" : row.Field<string>("PROVEEDOR"),
                            //BANCO = String.IsNullOrEmpty(row.Field<string>("BANCO")) ? "" : row.Field<string>("BANCO"),
                            NUMERO_CUENTA = String.IsNullOrEmpty(row.Field<string>("NUMERO_CUENTA")) ? "" : row.Field<string>("NUMERO_CUENTA"),
                            CLABE = String.IsNullOrEmpty(row.Field<string>("CLABE")) ? "" : row.Field<string>("CLABE"),
                            BENEFICIARIO = String.IsNullOrEmpty(row.Field<string>("BENEFICIARIO")) ? "" : row.Field<string>("BENEFICIARIO"),
                        }
                        ).ToList();
                    return list;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// Método para insertar un Proveedor Cuenta
        /// </summary>
        /// <param name="cat"></param>
        /// <returns></returns>
        //public static elr_tracking_bal.UpsertStateMsg InsertProveedorCuenta(ProveedorCuenta cat)
        //{
        //    ProveedorCuenta inser;
        //    elr_tracking_bal.UpsertStateMsg inserCat;
        //    try
        //    {
        //        int dt = elr_tracking_dal.SrvDB.ExecuteNonQuery("exec SP_INSERT_CAT_PROVEEDOR_CUENTA " + cat.ID_PROVEEDOR + "," + cat.ID_BANCO + ",'" + cat.NUMERO_CUENTA + "','" + cat.CLABE + "','" + cat.BENEFICIARIO + "'");

        //        inser = new ProveedorCuenta(cat.ID_PROVEEDOR, cat.ID_BANCO, cat.NUMERO_CUENTA, cat.CLABE, cat.BENEFICIARIO);
        //        inserCat = new elr_tracking_bal.UpsertStateMsg("Registros guardados " + dt.ToString(), true);
        //        return inserCat;
        //    }
        //    catch (Exception ex)
        //    {
        //        inserCat = new elr_tracking_bal.UpsertStateMsg("Error al guardar " + ex, false);
        //        return inserCat;
        //    }
        //}
        /// <summary>
        /// Método para eliminar Proveedores Cuenta
        /// </summary>
        /// <param name="ID_PROVEEDOR_CUENTA"></param>
        /// <returns></returns>
        public static elr_tracking_bal.DeleteStateMsg DeleteProveedorCuenta(string[] ID_PROVEEDOR_CUENTA)
        {
            elr_tracking_bal.DeleteStateMsg delete;
            string join;
            if (ID_PROVEEDOR_CUENTA == null)
            {
                join = "";
            }
            else
            {
                join = String.Join(",", ID_PROVEEDOR_CUENTA);
            }
            try
            {
                int dt = elr_tracking_dal.SrvDB.ExecuteNonQuery("exec SP_DELETE_CAT_PROVEEDOR_CUENTA '" + join + "'");
                delete = new elr_tracking_bal.DeleteStateMsg("Registro eliminado" + dt.ToString(), true);
                return delete;
            }
            catch (Exception ex)
            {
                delete = new elr_tracking_bal.DeleteStateMsg("Error al eliminar" + ex, false);
                return delete;
            }
        }
        /// <summary>
        /// Método que actualiza un Proveedor Cuenta
        /// </summary>
        /// <param name="cat"></param>
        /// <returns></returns>
        //public static elr_tracking_bal.UpsertStateMsg UpdateProveedorCuenta(ProveedorCuenta cat)
        //{
        //    ProveedorCuenta update;
        //    UpsertStateMsg updateCat;
        //    try
        //    {
        //        int dt = elr_tracking_dal.SrvDB.ExecuteNonQuery("exec SP_UPDATE_CAT_PROVEEDOR_CUENTA " + cat.ID_PROVEEDOR_CUENTA + "," 
        //                                                    + cat.ID_PROVEEDOR + "," + cat.ID_BANCO + ",'" + cat.NUMERO_CUENTA+ "','" 
        //                                                    + cat.CLABE + "','" + cat.BENEFICIARIO + "'");

        //        update = new ProveedorCuenta(cat.ID_PROVEEDOR_CUENTA, cat.ID_PROVEEDOR, cat.ID_BANCO, cat.NUMERO_CUENTA, cat.CLABE, cat.BENEFICIARIO);
        //        updateCat = new UpsertStateMsg("Registros actualizados " + dt.ToString(), true);
        //        return updateCat;
        //    }
        //    catch (Exception ex)
        //    {
        //        updateCat = new UpsertStateMsg("Error al actualizar " + ex, false);
        //        return updateCat;
        //    }
        //}
        /// <summary>
        /// Método para obtener un Proveedor Cuenta
        /// </summary>
        /// <param name="ID_PROVEEDOR"></param>
        /// <returns></returns>
        //public static ProveedorCuenta GetOneProveedorCuenta(int ID_PROVEEDOR_CUENTA)
        //{
        //    try
        //    {
        //        ProveedorCuenta cat;
        //        DataTable dt = elr_tracking_dal.SrvDB.ExecuteQuery("exec SP_GETONE_CAT_PROVEEDOR_CUENTA " + ID_PROVEEDOR_CUENTA + "");
        //        if (dt.Rows.Count == 0)
        //        {
        //            return null;
        //        }
        //        else if (ID_PROVEEDOR_CUENTA == 0)
        //        {
        //            return null;
        //        }
        //        else
        //        {
        //            cat = new ProveedorCuenta(
        //                Convert.ToInt32(dt.Rows[0]["ID_PROVEEDOR_CUENTA"])
        //                ,new Banco( Convert.ToInt32(dt.Rows[0]["ID_BANCO"]), Convert.ToString(dt.Rows[0]["BANCO"]) )
        //                ,new Proveedor( Convert.ToInt32(dt.Rows[0]["ID_PROVEEDOR"]), Convert.ToString(dt.Rows[0]["PROVEEDOR"]) )
        //                ,Convert.ToString(dt.Rows[0]["NUMERO_CUENTA"])
        //                ,Convert.ToString(dt.Rows[0]["CLABE"])
        //                ,Convert.ToString(dt.Rows[0]["BENEFICIARIO"]);
        //        }
        //        return cat;
        //    }
        //    catch (Exception ex)
        //    {
        //        throw ex;
        //    }
        //}
        /// <summary>
        /// Constructor sin parámetros
        /// </summary>
        public ProveedorCuenta() { }
        /// <summary>
        /// Constructor con ocho parámetros
        /// </summary>
        /// <param name="ID_PROVEEDOR"></param>
        /// <param name="ID_BANCO"></param>
        /// <param name="ID_PROVEEDOR_CUENTA"></param>
        /// <param name="NUMERO_CUENTA"></param>
        /// <param name="CLABE"></param>
        /// <param name="BENEFICIARIO"></param>
        /// <param name="PROVEEDOR"></param>
        /// <param name="BANCO"></param>
        public ProveedorCuenta(int ID_PROVEEDOR, string NUMERO_CUENTA, Proveedor proveedor, Banco banco, string CLABE, string BENEFICIARIO)
        {
            this._PROVEEDOR = new Proveedor(proveedor.ID_PROVEEDOR, proveedor.PROVEEDOR);
            this._BANCO = new Banco(banco.ID_BANCO, banco.BANCO);
            this._ID_PROVEEDOR_CUENTA = ID_PROVEEDOR_CUENTA;
            this._NUMERO_CUENTA = NUMERO_CUENTA;
            this._CLABE = CLABE;
            this._BENEFICIARIO = BENEFICIARIO;
        }

        public event PropertyChangedEventHandler PropertyChanged;
    }
}